package org.dxy.trigger.http.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dxy.api.dto.request.mbom.*;
import org.dxy.api.response.R;
import org.dxy.infrastructure.persistent.db.mybatispuls.po.query.MBOMViewPo;

import java.util.List;

/**
 * MBOM应用服务接口
 * @author dxy
 * @createTime 2025/9/10
 */
public interface MBOMApplicationService {

    /**
     * 从EBOM同步创建MBOM
     */
    R<Long> syncFromEBOM(SyncMBOMFromEBOMRequest request);

    /**
     * 创建MBOM
     */
    R<Long> create(CreateMBOMRequest request);

    /**
     * 分页查询MBOM列表
     */
    R<Page<MBOMViewPo>> list(Page<MBOMViewPo> page, MBOMViewPo query);

    /**
     * 更新MBOM信息
     */
    R<Void> update(Long id, UpdateMBOMRequest request);

    /**
     * 提交审核
     */
    R<Void> submitForReview(Long id, SubmitMBOMReviewRequest request);

    /**
     * 审核通过
     */
    R<Void> approve(Long id, ApproveMBOMRequest request);

    /**
     * 审核拒绝
     */
    R<Void> reject(Long id, RejectMBOMRequest request);

    /**
     * 发布MBOM
     */
    R<Void> release(Long id);

    /**
     * 分配给工单
     */
    R<Void> assignToWorkOrder(Long id, AssignMBOMToWorkOrderRequest request);

    /**
     * 作废MBOM
     */
    R<Void> obsolete(Long id, ObsoleteMBOMRequest request);

    /**
     * 获取MBOM详情
     */
    R<MBOMViewPo> getById(Long id);

    /**
     * 根据产品获取有效MBOM列表
     */
    R<List<MBOMViewPo>> getActiveByProductId(Long productId);

    /**
     * 根据状态获取MBOM列表
     */
    R<List<MBOMViewPo>> getByStatus(String status);
}